package com.CGFrame.struts.bean.project;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 在这里你可以实现文件及文件夹的复制拷贝， 可以向方法中传文件名或文件夹名实现源文件到目标文件的复制拷贝
 * 
 * @author OUYANGGQ
 * 
 */
public class FoldCopy {

	/**
	 * 文件夹拷贝，将源文件夹下的所有文件及其子文件夹（文件）拷贝到目标文件夹（文件）下
	 * 
	 * @param sourceFile
	 *            源文件
	 * @param desFile
	 *            目标文件
	 * @return
	 */
	public boolean copyDirectiory(String sourceFile, String desFile)
			throws IOException {

		File source = new File(sourceFile);
		if (!source.exists()) {
			System.out.println(source.getAbsolutePath()
					+ "========源文件不存在！=======");
			return false;
		}
		File des = new File(desFile);
		if (!des.exists())
			des.mkdirs();// 不存在目标文件就创建

		File[] file = source.listFiles();
		FileInputStream input = null;
		FileOutputStream output = null;
		try {
			for (int i = 0; i < file.length; i++) {
				if (file[i].isFile()) { // 如果是文件 则读源文件 写入目标文件
					input = new FileInputStream(file[i]);
					output = new FileOutputStream(new File(desFile + "/"
							+ file[i].getName()));
					byte[] b = new byte[1024 * 5];
					int len;
					while ((len = input.read(b)) != -1) { // 读文件
						output.write(b, 0, len); // 向目标文件写文件
					}
					input.close();
					output.flush();
					output.close();
				} else if (file[i].isDirectory()) { // 如果是文件夹 递归读取子文件或文件夹
					copyDirectiory(sourceFile + "/" + file[i].getName(),
							desFile + "/" + file[i].getName());
				}
			}
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			if (input != null)
				input.close();
			if (output != null)
				output.close();
		}
	}
	
	/**
	 * 测试主程序
	 */
	public static void main(String args[]) throws IOException {
		System.out.println(System.currentTimeMillis());
		String url1 = "Z:/TT4/Project/scenes/Episodes/EP001/Pre_Production";
		String url2 = "Z:/TT4/Project/scenes/Episodes/EP001/DD";
		new FoldCopy().copyDirectiory(url1, url2);
		System.out.println(System.currentTimeMillis());
	}


}
